<?php 
/** 
 * 整数中1出现的次数（从1到n整数中1出现的次数）
 * 例如 1、10、11、12、13因此共出现6次,
 */

function NumberOf1Between1AndN_Solution($n)
{
	if ($n < 1) {
		return 0;
	}
	$len = getLenNum($n);
	if ($len == 1) {
		return 1;
	}
	$tem = pow(10, $len -1);

	$first = intval($n / $tem); // 第一位数
	$firstOneNum = $first == 1 ? $n % $tem + 1: $tem; //·
	$otherOneNum = $first * ($len - 1) * (intval($tem / 10));
	return $firstOneNum + $otherOneNum + NumberOf1Between1AndN_Solution($n % $tem);
}


function getLenNum($n)
{
	$len = 0;
	while ($n != 0) {
		$len++;
		$n = intval($n / 10);
	}
	return $len;
}


$n = 327; // 0-300, 300-327
var_dump(NumberOf1Between1AndN_Solution($n));